package com.bobo.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bobo.base.Q;
import com.bobo.base.mybatis.IService;
import com.bobo.pojo.SysJob;

import java.util.Date;
import java.util.List;

/**
 * 定时任务
 *
 * @author LILIBO
 * @since 2023-02-18
 */
public interface SysJobService extends IService<SysJob> {

    /**
     * 获取定时任务分页数据
     *
     * @param page
     * @param param
     * @return
     */
    IPage<SysJob> getPageList(Page page, Q param);

    /**
     * 添加简单的定时任务（在时间范围内每隔n秒执行一次）
     *
     * @param sysJob 定时任务
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param interval 时间间隔
     * @return 是否成功
     */
    boolean createSimpleJob(SysJob sysJob, Date startTime, Date endTime, int interval);

    /**
     * 添加定时任务（通过Cron表达式定义周期）
     *
     * @param sysJob 定时任务
     * @return 是否成功
     */
    boolean addJob(SysJob sysJob);

    /**
     * 修改定时任务（通过Cron表达式重新定义周期）
     *
     * @param sysJob 定时任务
     * @return 是否成功
     */
    boolean modifyJob(SysJob sysJob);

    /**
     * 暂停定时任务（暂停已存在的任务）
     *
     * @param sysJob 定时任务
     * @return 是否成功
     */
    boolean pauseJob(SysJob sysJob);

    /**
     * 启动定时任务（从暂停状态恢复任务运行）
     *
     * @param sysJob 定时任务
     * @return 是否成功
     */
    boolean resumeJob(SysJob sysJob);

    /**
     * 删除定时任务（任务将从系统移除）
     *
     * @param jobId 定时任务ID
     * @return 是否成功
     */
    boolean deleteJob(Long jobId);

    /**
     * 批量删除定时任务（任务将从系统移除）
     *
     * @param ids 定时任务ID集合
     * @return 是否成功
     */
    boolean removeJobs(List<Long> ids);

}
